package org.protester.core;

import java.io.File;
import java.util.Date;
import java.util.Set;

@Deprecated
// TODO Implementar classe como interface
public class Service {

	/**
	 * Cria um novo protesto com status privado, ou seja, nao publicado para
	 * visualizacao
	 * 
	 * @param title
	 *            O titulo do protesto
	 * @param description
	 *            A descricao do protesto
	 * @param location
	 *            A localizacao do lugar da qual o proteste refere-se. Obs: os
	 *            atributos do objeto serao "clonados" para a criacao do novo
	 *            protesto
	 * @param As
	 *            categorias das quais o protesto se enquadra
	 * @see Location
	 * @see Category
	 */
	public Protest createProtest(String title, String description,
			Location location, Set<Category> categories)
			throws ProtesterException {

		if (categories.size() == 0)
			throw new ProtesterException(
					"O protesto deve ter pelo menos uma categoria.");

		Protest protest = new Protest(title, description, location);

		// TODO protest.save()

		for (Category category : categories) {
			protest.getCategories().add(category);

			// TODO protestCategory.save();
		}

		return protest;

	}

	/**
	 * Cria uma nova tag para o protesto
	 * 
	 * @param id
	 *            O codigo de identificacao do protesto
	 * @param tagName
	 *            A nova tag
	 */
	public void createProtestTag(long id, String tagName)
			throws ProtesterException {
		Protest protest = null; // TODO get(id)

		Tag tag = null; // TODO get(String name, tagName)

		// se nao existir, cria uma nova tag no banco de dados
		if (tag == null) {
			validateTagName(tagName);
			tag = new Tag(tagName);
		}

		// ProtestTag protestTag = new ProtestTag(protest, tag);

		// TODO protestTag.save()

	}

	/**
	 * Valida uma tagname. Se nenhuma excessao for lancada, significara que a
	 * tagname eh valida
	 * 
	 * @param tagName
	 *            A tagname
	 */
	public void validateTagName(String tagName) throws ProtesterException {
		// TODO throws
	}

	/**
	 * Cria um novo link para um protesto
	 * 
	 * @param id
	 *            O codigo de identificacao do protesto
	 * @param link
	 *            O novo link
	 * @throws ProtesterException
	 */
	public void createProtestLink(long id, String link)
			throws ProtesterException {

		Protest protest = null; // TODO get(id)

		validateLink(link);

		protest.getLinks().add(link);

		// ProtestLink protestLink = new ProtestLink();

		// TODO protestLink.save()

	}

	/**
	 * Valida um link. Caso nanhuma excessao seja lancada, significara que o
	 * link eh valido
	 * 
	 * @param link
	 *            O link
	 */
	public void validateLink(String link) throws ProtesterException {
		// TODO implementar throws
	}

	// TODO
	public void createProtestImage(long protestId, Image image, File imageFile) {

	}

	/**
	 * Publica um protesto: Setando sua data de publicacao
	 * 
	 * @param id
	 *            O codigo de identificacao do protesto
	 */
	public void publishProtest(long id) {

		Protest protest = null; // TODO get(id)

		protest.setDatePublished(new Date());

		// TODO protest.update()

	}

	public static void main(String[] args) {

	}

}
